#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QFile>
#include <QTextCodec>
#include <QTimer>
#include <QMessageBox>
#include <ksdDlg/KSDemoDlg.h>
#include <driver/IIMTDriver.h>
#include <ksdDlg/currencyChassis_savePoseByOdom_sql.h>
#include <ksdDlg/KSDemoDlgtask.h>
#include <ksdDlg/KSDemoDlgtaskparamer.h>
#include <ksdDlg/KSDemoDlgtaskTme.h>
#include <ksdDlg/KSDemoDlgtaskCostMapPlayer.h>
#include <ksdDlg/currencyChassis_registerServiceWindow.h>
#include <QKeyEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
      //配置 加载文件的路径默认/home/moveScript.txt
      QString filePath="/home/iimt/ip_address.txt";
      //服务器地址
      QString ip_address="";
      //服务器端口
      int port=31001;
      //点位编辑
      KSDemoDlg *dlg=NULL;
      //任务
      KSDemoDlgtask *dlgtask=NULL;
      //设置
      KSDemoDlgtaskparamer *dlgtaskparamer=NULL;
      //定时任务
      KSDemoDlgtaskTme *dlgtaskTme=NULL;
      //点位标定
      SavePoseByOdom *savePoseByOdom=NULL;
      //虚拟墙
       KSDemoDlgtaskCostMapPlayer  *dlgtaskCostMapPlayer=NULL;
       //授权slam
       RegisterService  *registerService=NULL;
      //获取地图名称
      //QList<MapName> mapNames;
      //获取地图名称
       QList<QMap<QString,std::vector<std::string>>> mapNames_list ;

     //socket连接状态 自动连接
      int connectfog=-1;
      //轮询是否已经连接socket
      QTimer   connectSocketTimer;
      QTimer   timer;
       //绿色字体
       QString recv_prefix_green;
       //红色字体
       QString recv_prefix_red;

       int testInflg=1;
       int mapnameflg=1;
       //logall 记录所有日志
       int logall=-1;

       // 取余依次发送tcp数据
       int allflg=0;
       //是否优先执行数据， 1：单个数据发送优先 -1：常用数据一直轮训发送
       int fistsendMsg=-1;

       //指令队列
       queue<SendMsg> instructionQueue;

       //地图
        QString mapName="";
       //楼层
        QString robotfloor="";
        //机器人所在位置状态
        QString   testInfo_status_1="";//机器人正在前往目的地
        QString   testInfo_status_2= "";//机器人在目的地

           //键盘控制
        QString keyEventjinapanflg="false";
          //建图
       QString jinmapflg="false";
         //使能
       QString   enableFlag="false";
       //运行状态
      QString    robotStatus="";
      //是否有任务没结束 -1 未结束
     int start_clickedflg=1;
     //程序启动就获取一次地图
      int getMapNamelistfirst=1;

      //取餐点flg
      int qucaidianflg=0;

      // 软急停 状态
      int startDisinfectlampflag = 1;
      //建地图服务 状态
      int jinmapflag_status =0;


public:
    Widget(QWidget *parent = nullptr);


public:

      void initWidgets() ;
      //初始化2
      void initWidget2();
      void bindSignal() ;
      //回调函数
      void setCallBack();
      //1.socket连接 轮询是否已经连接socket
      void connectSocketToHostWithTime();
      //显示日志
       void show_console(QString msg_log,QString send);
       //保存日志
       void Log_Save(const char*str,QString logfileTimeName);
       //清除日志
       void clear_log();
       //初始话
       void initvariable();
       //读取文件中的 配置数据ip地址：
       void readFileGetip_address();
       void keyPressEvent(QKeyEvent *event);
       //向队列中添加需要发送的tcp数据
       void add_instructionQueue_sendMsg();
       //读取队列中的数据通过 tcp 发送给服务端
       void read_instructionQueue_sendMsg();
       //向队列中添加需要发送的tcp数据(单个数据添加) 参数1 repeat：是否循环发送 -1:不循环发送 1：循环一直发送 | 参数2 sendMsg：需要tcp发送的消息 | 参数3 logdFlg：是否需要记录日志 -1:不记录日志 1：记录日志| 参数4：logdMsg 需要记录的日志内容| 参数5 logColor：日志显示的颜色 get:绿色 send：红色
       void add_single_instructionQueue_sendMsg(int repeat , QString sendMsg , int logdFlg, QString logdMsg, QString logColor);
       //初始化
       void  initWidget();
    ~Widget();

private slots:
       void on_start_clicked();

       void on_stop_clicked();

       void on_btnBackSend_clicked();

       void on_next_clicked();

       void on_close_clicked();

       void on_estop_clicked();

       void on_start_KSDemoDlg_clicked();

       void on_start_SendPoseAndgetPose_clicked();

       void on_show_TASKPOSE_clicked();

       void on_start_KSDemoDlgTask_clicked();

       void on_setParameter_clicked();

       void on_mapname_destroyed();

       void on_mapnames_activated(const QString &arg1);

       void on_mapnames_currentIndexChanged(const QString &arg1);

       void on_setRobotPose_clicked();

       void on_savemap_clicked();

       void on_startDisinfectlamp_clicked();

       void on_keyEventjinapan_clicked();

       void on_jinmap_clicked();

       void on_tiaoshidemo_clicked();

       void on_allLog_clicked();

       void on_batteryChargeing_clicked();

       void on_setStcmBtn_clicked();

       void on_getStcmBtn_clicked();

       void on_help_clicked();

       void on_sendMessage_clicked();

       void on_startchargeing_clicked();

       void on_chargeingStop_clicked();

       void on_chargeingOff_clicked();

       void on_automaticDetectionServer_clicked();

       void on_getTopics_clicked();

       void on_costMapPlayer_clicked();

       void on_registerService_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
